import os
import yaml
import socket

# 定义全局变量
_config = None


def load_config():
    global _config  # 声明 _config 为全局变量

    # 获取环境变量
    env = os.getenv('APP_ENV', 'dev')  # 默认值为 'dev'

    # 根据环境变量选择配置文件
    config_file = os.path.join('config', f'config_{env}.yaml')

    # 读取 YAML 配置文件
    try:
        with open(config_file, 'r', encoding='utf-8') as file:
            _config = yaml.safe_load(file)
    except FileNotFoundError as e:
        raise Exception(f"Configuration file '{config_file}' not found")


def get_config():
    """用于获取全局配置的辅助函数"""
    if _config is None:
        load_config()  # 如果配置尚未加载，则加载配置
    return _config


# 加载配置
load_config()

# 确保配置已加载
if _config is not None:
    # 数据库配置 - SQLite
    db_config = _config['database']
    # SQLite配置
    RELATION_DB_TYPE = 'sqlite'
    RELATION_DB_PATH = db_config.get('path', 'db/db.sqlite')
    # 为了兼容性，设置默认值
    RELATION_DB_PWD = None
    RELATION_DB_USER = None
    RELATION_DB_HOST = None
    RELATION_DB_PORT = None
    RELATION_DB_NAME = None




else:
    raise Exception(f"Configuration file load none")




# 数据库连接编码
DB_CHARSET = "utf8mb4"
# mincached : 启动时开启的闲置连接数量(缺省值 0 开始时不创建连接)
DB_MIN_CACHED = 10
# maxcached : 连接池中允许的闲置的最多连接数量(缺省值 0 代表不闲置连接池大小)
DB_MAX_CACHED = 10
# maxshared : 共享连接数允许的最大数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用
DB_MAX_SHARED = 20
# maxconnecyions : 创建连接池的最大数量(缺省值 0 代表不限制)
DB_MAX_CONNECYIONS = 100
# blocking : 设置在连接池达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误<toMany......> 其他代表阻塞直到连接数减少,连接被分配)
DB_BLOCKING = True
# maxusage : 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用).当达到最大数时,连接会自动重新连接(关闭和重新打开)
DB_MAX_USAGE = 0
# setsession : 一个可选的SQL命令列表用于准备每个会话，如["set datestyle to german", ...]
DB_SET_SESSION = None
# creator : 使用连接数据库的模块（SQLite不需要）
DB_CREATOR = None